package com.xst.common.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class UuidUtil {
	
	/** 
     * 锁对象，可以为任意对象 
     */  
    private static Object lockObj = "lockerOrder";
    /** 
     * 订单号生成计数器 
     */  
    private static long orderNumCount = 0L;  
    /** 
     * 每毫秒生成订单号数量最大值 
     */  
    private static int maxPerMSECSize=1000;

	/**
	 * 封装JDK自带的UUID, 通过Random数字生成, 中间无-分割.
	 */
	public static String get32UUID() {
		String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
		return uuid;
	}
	
	/**
	 * 封装JDK自带的UUID, 通过Random数字生成, 中间有-分割.
	 */
	public static String uuid() {
		return UUID.randomUUID().toString();
	}
	
	/**
	 * 生成的订单号
	 * @return
	 */
	public static String getOrderNum() {
		// 最终生成的订单号
		String finOrderNum = "";
		synchronized (lockObj) {
			// 取系统当前时间作为订单号变量前半部分，精确到毫秒
			long nowLong = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
			// 计数器到最大值归零，可扩展更大，目前1毫秒处理峰值1000个，1秒100万
			if (orderNumCount >= maxPerMSECSize) {
				orderNumCount = 0L;
			}
			//组装订单号
			String countStr=maxPerMSECSize +orderNumCount+"";
			finOrderNum = nowLong+countStr.substring(1);
			orderNumCount++;
		}
		return finOrderNum;
	}
	
	public static void main(String[] args) {
		System.out.println(get32UUID());
		System.out.println(getOrderNum());
	}
}
